package com.baigt.juc.base.volatile_;

import java.util.concurrent.TimeUnit;

/**
 * 类功能描述:
 *          示例多线程变量修改 其他线程无法感知到变化
 *          一读一写
 *          读线程对写无感知
 *
 *          分析出现这种现象的原因？
 *          CPU
 *          JMM
 * @author baigt
 * @version V1.0
 * @since 2019-10-24 17:54
 */
public class VolatileDemo01 {

    //初始变量
    static int initvalue = 0;
    // 最大值
    final static int max = 5;

    public static void main(String[] args) {
        new Thread(() -> {
            int local = initvalue;
            while (initvalue <= max) {
                if (initvalue != local) {
                    System.out.println("the initvalue update to " + initvalue);
                    local = initvalue;
                }
            }
        }, "reader").start();

        new Thread(() -> {
            int local = initvalue;
            while (initvalue < max) {
                System.out.println("the initvalue will change to " + ++local);
                initvalue = local;
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, "Write").start();

    }
}
